package edu.nf.ch07.service;

import edu.nf.ch07.container.ContainerFactory;

import java.math.BigDecimal;

/**
 * @author wangl
 * @date 2025/4/17
 * 支付上下文，负责选择合适的支付策略来进行支付
 */
public class PaymentService {
    //测试容器（仅仅为了演示效果）
    private final static ContainerFactory factory = new ContainerFactory("edu.nf.ch07.service");

    private Payment payment;

    /**
     * 构造方法传入一个支付的类型来决定实例化某一种支付策略
     * @param type 支付类型
     */
    public PaymentService(String type) {
        try {
            payment = factory.getBean(type);
        } catch (Exception e) {
            throw new RuntimeException("暂不支持此支付类型");
        }
    }

    /**
     * 执行支付
     * @param money
     */
    public void pay(BigDecimal money) {
        //调用具体某一个支付实现类的方法
        payment.pay(money);
    }
}